<!DOCTYPE html>
<html>
<!--
Copyright 2009 Google Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<head>
  <title>Google Earth API Samples - Creating Line Strings</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
  <!-- You should probably remove most of this extra cruft if you're copying
       this sample! -->
  <style type="text/css">@import "static/examples.css";</style>
  <style type="text/css">@import "static/prettify/prettify.css";</style>
  <script type="text/javascript" src="static/prettify/prettify.js"></script>
  
  <!-- Change the key below to your own Maps API key -->
  <script type="text/javascript" src="http://www.google.com/jsapi?hl=en&amp;key=ABQIAAAAwbkbZLyhsmTCWXbTcjbgbRSzHs7K5SvaUdm8ua-Xxy_-2dYwMxQMhnagaawTo7L1FE1-amhuQxIlXw"></script>
  <script type="text/javascript">
  /* <![CDATA[ */
  var ge;
  google.load("earth", "1");

  function init() {
    google.earth.createInstance('map3d', initCB, failureCB);
  }
  
  function initCB(instance) {
    ge = instance;
    ge.getWindow().setVisibility(true);
    
    // add a navigation control
    ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
    
    // add some layers
    ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
    ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);

    var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
    la.setRange(1000000);
    ge.getView().setAbstractView(la);
    
    createLinestring();
    
    document.getElementById('installed-plugin-version').innerHTML =
      ge.getPluginVersion().toString();
  }
  
  function failureCB(errorCode) {
  }
  
  function createLinestring() {
    function addToLineString(lineString, lat, lng, latOffset, lngOffset) {
      var altitude = 1.0; // give it some altitude
      lineString.getCoordinates().
        pushLatLngAlt(lat + latOffset, lng + lngOffset, altitude);
    }
  
    var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
    var lat = lookAt.getLatitude();
    var lng = lookAt.getLongitude();
  
    // create the line string placemark
    var lineStringPlacemark = ge.createPlacemark('');
    
    // create the line string geometry
    var lineString = ge.createLineString('');
    lineStringPlacemark.setGeometry(lineString);
    
    // tessellate (i.e. conform to ground elevation)
    lineString.setTessellate(true);
  
    // add the the points to the line string geometry
    addToLineString(lineString, lat, lng,   0,   0, 0);
    addToLineString(lineString, lat, lng, 1.5,  .5, 0);
    addToLineString(lineString, lat, lng,   0, 1.0, 0);
    addToLineString(lineString, lat, lng, 1.5, 1.5, 0);
    addToLineString(lineString, lat, lng,   0, 2.0, 0);
    addToLineString(lineString, lat, lng, 1.5, 2.5, 0);
    addToLineString(lineString, lat, lng,   0, 3.0, 0);
    addToLineString(lineString, lat, lng, 1.5, 3.5, 0);
    addToLineString(lineString, lat, lng,   0, 4.0, 0);
    addToLineString(lineString, lat, lng, 1.5, 4.5, 0);
  
    ge.getFeatures().appendChild(lineStringPlacemark);
  }
  
  function buttonClick() {
    createLinestring();
  }
  
  /* ]]> */
  </script>
</head>
<body onload="if(window.prettyPrint)prettyPrint();init();">
  <h1>Google Earth API Samples - Creating Line Strings</h1>
  <dl>
            <dt>Last Modified:</dt><dd>06/08/2009</dd>
    <dt>Installed Plugin Version:</dt><dd id="installed-plugin-version">...</dd>
  </dl>
  <div style="clear: both;"></div>
  
  <div id="ui" style="position: relative;">
    <div id="map3d" style="border: 1px solid silver; width: 500px; height: 500px;"></div>

    <div id="extra-ui" style="position: absolute; left: 520px; top: 0;">
      <input type="button" onclick="buttonClick()" value="Create Another LineString!"/>
      
      <h2>Relevant Resources:</h2>
      <ul>
<li><a href="http://code.google.com/apis/earth/documentation/reference/interface_kml_line_string.html">KmlLineString Reference</a></li>
<li><a href="http://code.google.com/apis/earth/documentation/reference/interface_kml_coord_array.html">KmlCoordArray Reference</a></li>
<li><a href="http://code.google.com/apis/earth/documentation/reference/interface_kml_placemark.html">KmlPlacemark Reference</a></li>
<a id="playground-button" href="http://code.google.com/apis/ajax/playground/?exp=earth#creating_line_strings"><img src="static/playground-button.png"/></a>      </ul>
      <h2>Relevant Code Excerpt:</h2>      <pre class="prettyprint lang-js">function addToLineString(lineString, lat, lng, latOffset, lngOffset) {
  var altitude = 1.0; // give it some altitude
  lineString.getCoordinates().
    pushLatLngAlt(lat + latOffset, lng + lngOffset, altitude);
}

var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
var lat = lookAt.getLatitude();
var lng = lookAt.getLongitude();

// create the line string placemark
var lineStringPlacemark = ge.createPlacemark('');

// create the line string geometry
var lineString = ge.createLineString('');
lineStringPlacemark.setGeometry(lineString);

// tessellate (i.e. conform to ground elevation)
lineString.setTessellate(true);

// add the the points to the line string geometry
addToLineString(lineString, lat, lng,   0,   0, 0);
addToLineString(lineString, lat, lng, 1.5,  .5, 0);
addToLineString(lineString, lat, lng,   0, 1.0, 0);
addToLineString(lineString, lat, lng, 1.5, 1.5, 0);
addToLineString(lineString, lat, lng,   0, 2.0, 0);
addToLineString(lineString, lat, lng, 1.5, 2.5, 0);
addToLineString(lineString, lat, lng,   0, 3.0, 0);
addToLineString(lineString, lat, lng, 1.5, 3.5, 0);
addToLineString(lineString, lat, lng,   0, 4.0, 0);
addToLineString(lineString, lat, lng, 1.5, 4.5, 0);

ge.getFeatures().appendChild(lineStringPlacemark);</pre>    </div>
  </div>
</body>
</html>
